package com.ftg.learn;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * @author kangjx
 * @createTime 2022/9/21
 */
public class LearnRabbitPublish {


    public static void main(String[] args) throws IOException {
        ConnectionFactory cf = new ConnectionFactory();
        cf.setHost("127.0.0.1");
        cf.setPort(5673);
        cf.setVirtualHost("dev");
        cf.setUsername("kangjx");
        cf.setPassword("kangjx");
        Connection conn = null;
        try {
            conn = cf.newConnection();
            //频道 我们可以操作的接口
            System.out.println(conn.isOpen());
            Channel c = conn.createChannel();

//            queue–队列的名称
//            durable–如果我们要声明一个持久队列，则为true（队列将在服务器重启后继续存在）
//            exclusive–如果我们要声明独占队列（仅限于此连接），则为true
//            autoDelete–如果我们正在声明自动删除队列，则为true（服务器将在不再使用时删除它）
//            arguments–队列的其他属性（构造参数）
            c.queueDeclare("hello1",true,false,false,null);

            //向队列里面添加内容

//            发布消息。发布到不存在的交换将导致通道级协议异常，从而关闭通道。如果资源驱动警报生效，Channel#basicPublish的调用最终将被阻止。
//            参数：
//            exchange–向其发布消息的交易所
//            routingKey–路由密钥
//            props–消息路由头的其他属性等
//            body–消息正文
            c.basicPublish("","hello1",null,"helloworld2".getBytes(StandardCharsets.UTF_8));
            System.out.println("添加成功");
//            conn.close();
        } catch (IOException | TimeoutException e) {
            e.printStackTrace();
        }finally{
            conn.close();
        }
    }

}
